获取当前协程的唯一ID
function \Swoole\Coroutine::getuid() : int
仅在当前进程内唯一
- 成功时返回当前协程
ID(int)
- 如果当前不在协程环境中,则返回
-1
echo Swoole\Coroutine::getuid();
cid map 使用了 bit map, 它在分配时总是会寻找下一个可用的比特位
我们可以通过以下代码来确认这个事实:
co::set([
'max_coroutine' => PHP_INT_MAX,
'log_level' => SWOOLE_LOG_INFO,
'trace_flags' => 0
]);
$map = [];
while (true) {
if (empty($map)){
$cid = go(function () {co::sleep(5);});
}else{
$cid = go(function () { });
}
if (!isset($map[$cid])) {
$map[$cid] = $cid;
} else {
var_dump(end($map));
var_dump($cid);
exit;
}
}
它将会打印:
int(524288)
int(2)
所以我们有 MAX_CORO_NUM_LIMIT => 0x80000
则在同一时间同一进程的协程数也不能超过 524288
虽然它的分配数量存在上限, 但这个数值非常大, 一个进程不可能同时存在这么多协程, 除非你有一台超大内存的机器, 但那时候你也不必再担心这个问题